﻿#region << 文件说明 >>

/*----------------------------------------------------------------
 * 命名空间：Vampirewal.Core.ScheduledTask
 * 唯一标识：dc4567dd-bd29-4702-91e4-3b6bca4671d9
 * 文件名：ScheduledTaskOption
 *
 * 创建者：杨程
 * 电子邮箱：235160615@qq.com
 * 创建时间：2024/8/27 15:40:43
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/

#endregion << 文件说明 >>

using Microsoft.Extensions.DependencyInjection;

namespace Vampirewal.Core.ScheduledTask;



/// <summary>
/// 定时任务配置
/// </summary>
internal sealed class ScheduledTaskOption : IScheduledTaskOption
{
    public IServiceCollection Services { get; }

    /// <summary>
    /// 构造函数
    /// </summary>
    public ScheduledTaskOption(IServiceCollection services)
    {
        Services = services;
        JobInfos = new List<JobInfo>();
    }

    public List<JobInfo> JobInfos { get; set; }

    public IScheduledTaskOption Register<TJob>(Action<IJobOption> option) where TJob : IJob
    {
        JobOption _jobOption = new JobOption();

        option?.Invoke(_jobOption);

        JobInfo info = new JobInfo()
        {
            JobType = typeof(TJob),
            JobOption = _jobOption,
        };

        JobInfos.Add(info);

        Services.AddTransient(typeof(TJob));

        return this;
    }

}